package cn.element.io.bio.case1;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

    public static void main(String[] args) {
        try {
            // 1.定义一个ServerSocket
            // 系统底层调：socket()、bind()、listen()
            ServerSocket server = new ServerSocket(8848);

            // 2.监听客户端的Socket连接请求
            // 系统底层调：accept() 会阻塞直到有客户端连接请求
            System.out.println("accept阻塞。。。。");
            Socket socket = server.accept();
            System.out.println("accept阻塞。。。。end");

            // 3.从Socket中得到一个字节输入流
            // 系统底层调：receive()  可以参考https://blog.csdn.net/weixin_48326567/article/details/130183644/
            // 输入输出流的理解： 首先相对于本机而言：输入和输出都是相对于内存来说的。文件输入到内存就得有个输入流，输出到文件就得有个输出流。
            // 内存输出到网络就得有个输出流，网络输入到内存就得有个输入流。
            // 这里是网络输入到内存，所以需要一个字节输入流。

            InputStream is = socket.getInputStream();
            System.out.println("这里会阻塞吗");
            // 4.把字节输入流包装成缓冲字符流
            BufferedReader bis = new BufferedReader(new InputStreamReader(is));


            String l = bis.readLine();
            System.out.println("这里会阻塞吗");
            if (l != null) {
                System.out.println("服务端接收到: " + l);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}
